package com.shiguiwu.springmybatis.javabase.thread.lock;

/**
 * @description: 锁接口
 * @author: stone
 * @date: Created by 2021/9/10 11:40
 * @version: 1.0.0
 * @pakeage: com.shiguiwu.springmybatis.lock
 */
public interface ILock<T> {

    /**
     * 获取分布式锁,支持重入
     * @param lockKey 锁可以
     * @param lockTimeout  持有锁的有效时间，防止死锁
     * @param getTimeout 获取锁超时时间，
     * @return 是否锁成功
     */
    public boolean lock(String lockKey, long lockTimeout, int getTimeout) throws Exception;

    /**
     * 解锁
     * @param lockKey 锁key
     *
     */
    public void unlock(String lockKey);

    /**
     * 重置锁对象
     * @param t 锁对象
     * @return 返回锁记录
     */
    public int restLock(T t);

}
